package com.jingdianjichi.redis.init;

import com.jingdianjichi.redis.util.SpringContextUtil;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
public class InitCache implements CommandLineRunner {

    // 实现 CommandLineRunner 接口的 run 方法，用于在 Spring Boot 应用启动后执行预热缓存操作
    @Override
    public void run(String... args) throws Exception {
        // 获取 Spring 应用上下文
        ApplicationContext applicationContext = SpringContextUtil.getApplicationContext();
        // 获取所有 AbstractCache 类型的 Bean
        Map<String, AbstractCache> beanMap = applicationContext.getBeansOfType(AbstractCache.class);
        // 调用每个缓存的初始化方法
        if (beanMap.isEmpty()) {
            return;
        }
        for (Map.Entry<String, AbstractCache> entry : beanMap.entrySet()) {
            // 获取缓存实例并调用初始化方法
            AbstractCache abstractCache = (AbstractCache) SpringContextUtil.getBean(entry.getValue().getClass());
            abstractCache.initCache();
        }
    }

}
